home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / libol / abstract_io.h next >
C/C++ Source or Header  |  2005-10-16  |  3KB  |  107 lines

  1. /***************************************************************************
  2.  *
  3.  * Copyright (c) 1998-1999 Niels M÷ller
  4.  * Copyright (c) 1999 BalaBit Computing
  5.  * 
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  * $Id: abstract_io.h,v 1.7 2003/04/30 08:08:50 bazsi Exp $
  21.  *
  22.  ***************************************************************************/
  23.  
  24. #ifndef __ABSTRACT_IO_H_INCLUDED
  25. #define __ABSTRACT_IO_H_INCLUDED
  26.  
  27. #include "objects.h"
  28. #include "objtypes.h"
  29.  
  30. typedef void abstract_addr;
  31.  
  32. #define CLASS_DECLARE
  33. #include "abstract_io.h.x"
  34. #undef CLASS_DECLARE
  35.  
  36. /* A read-function returning n means:
  37.  *
  38.  * n > 0: n bytes were read successfully.
  39.  * n = 0: No more data available, without blocking.
  40.  * n = -1: Read failed.
  41.  * n = -2: EOF.
  42.  */
  43. #define A_FAIL -1
  44. #define A_EOF -2
  45.  
  46. /* CLASS:
  47.    (class
  48.      (name abstract_read)
  49.      (vars
  50.        (read indirect-method int "UINT32 length" "UINT8 *buffer")
  51.        (recv indirect-method int "UINT32 length" "UINT8 *buffer" "abstract_addr *addr" "size_t *addrsize")))
  52. */
  53.  
  54. #define A_READ(f, length, buffer) (f)->read(&(f), (length), (buffer))
  55. #define A_RECV(f, length, buf, addr, addrlen) ((f)->recv(&(f), length, buf, addr, addrlen))
  56.  
  57. /* May store a new handler into *h. */
  58.  
  59. /* CLASS:
  60.    (class
  61.      (name read_handler)
  62.      (vars
  63.        (handler indirect-method int "struct abstract_read *read")))
  64. */
  65.  
  66. #define READ_HANDLER(h, read) ((h)->handler(&(h), (read)))
  67.  
  68. /* CLASS:
  69.    (class
  70.      (name abstract_write)
  71.      (vars
  72.        (write method int "UINT32 length" "UINT8 *data")
  73.        (writestr method int "struct ol_string *str")))
  74. */
  75.  
  76. #define A_WRITE(f, l, d) ((f)->write((f), l, d))
  77. #define A_WRITE_CSTR(f, s) ((f)->write(f, strlen(s), s))
  78. #define A_WRITE_STRING(f, p) ((f)->writestr(f, p))
  79.  
  80. /* CLASS:
  81.      (class
  82.        (name abstract_buffer)
  83.        (super abstract_write)
  84.        (vars
  85.          (writable pointer int)
  86.             (closed simple int)
  87.          (flush method int "struct abstract_write *")
  88.          (prepare method int)
  89.          (close method void)))
  90. */
  91.  
  92. #define BUF_FLUSH(buf, writer) ((buf)->flush((buf), (writer)))
  93. #define BUF_CLOSE(buf) ((buf)->close(buf))
  94. #define BUF_PREPARE(buf) ((buf)->prepare(buf))
  95.  
  96.  
  97. /* A handler that passes packets on to another handler */
  98. /* CLASS:
  99.    (class
  100.      (name abstract_write_pipe)
  101.      (super abstract_write)
  102.      (vars
  103.        (next object abstract_write)))
  104. */
  105.  
  106. #endif
  107.